package Colecciones;

import Modelo.EjecutaConsulta;
import Modelo.Fila;
import java.io.PrintStream;
import java.util.Calendar;
import java.util.Vector;

public class Persona
{
  public static Vector consultarDatosBasicos(Fila fConsulta)
  {
    Vector vResultado = new Vector();
    try
    {
      String strSql = "SELECT a.EMPLID, b.NATIONAL_ID_TYPE TIPO_DOCUMENTO, b.NATIONAL_ID NUMERO_DOCUMENTO, a.FIRST_NAME NOMBRES, a.LAST_NAME APELLIDOS, c.EMAIL_ADDR CORREO, j.CITY CIUDAD_RESIDENCIA, j.ADDRESS1 DIRECCION_RESIDENCIA, k.PHONE TELEFONO_RESIDENCIA, e.DESCR CARGO, f.DESCR EMPRESA, h.CITY CIUDAD_EMPRESA, h.ADDRESS1 DIRECCION_EMPRESA, d.PHONE TELEFONO_EMPRESA";

      String strTablas = " FROM";

      String strCondicion = "";
      String strJoin = "";

      String strValor = Utils.getValor(fConsulta, "ESTADO_CIVIL_PEOPLE");
      Vector vLista = new Vector();
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " WHERE (a.MAR_STATUS = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            strCondicion = strCondicion + " OR a.MAR_STATUS = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
      }

      strValor = Utils.getValor(fConsulta, "GENERO_PEOPLE");
      vLista = new Vector();
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
            if(!strCondicion.contains("WHERE")) {
                strCondicion = (new StringBuilder()).append(strCondicion).append(" WHERE").toString();
            }else{
                strCondicion = (new StringBuilder()).append(strCondicion).append(" AND").toString();
            }
          strCondicion = strCondicion + " (a.SEX = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            strCondicion = strCondicion + " OR a.SEX = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
      }

      strValor = Utils.getValor(fConsulta, "EDAD");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          Calendar calendario = Calendar.getInstance();

          int iDiaM = calendario.get(5);

          int iMes = calendario.get(2);

          int iAnno = calendario.get(1);

          int iAnnoInicial = iAnno - Integer.parseInt(vLista.get(0).toString());
          String strFechaInicial = iDiaM + "/" + (iMes + 1) + "/" + iAnnoInicial;

          int iAnnoFinal = iAnnoInicial - 5;
          String strFechaFinal = iDiaM + "/" + (iMes + 1) + "/" + iAnnoFinal;

          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (a.BIRTHDATE BETWEEN '" + strFechaFinal + "'" + " AND '" + strFechaInicial + "'";

          for (int i = 1; i < vLista.size(); ++i)
          {
            iAnnoInicial = iAnno - Integer.parseInt(vLista.get(i).toString());
            strFechaInicial = iDiaM + "/" + (iMes + 1) + "/" + iAnnoInicial;

            iAnnoFinal = iAnnoInicial - 5;
            strFechaFinal = iDiaM + "/" + (iMes + 1) + "/" + iAnnoFinal;

            strCondicion = strCondicion + " OR a.BIRTHDATE BETWEEN '" + strFechaFinal + "'" + " AND '" + strFechaInicial + "'";
          }

          strCondicion = strCondicion + ")\n";
        }
      }

      strValor = Utils.getValor(fConsulta, "CIUDAD_RESIDENCIA_PEOPLE");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (LOWER(TRANSLATE(j.CITY, 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU')) LIKE LOWER(TRANSLATE('%" + vLista.get(0) + "%', 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU'))";
          for (int i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR LOWER(TRANSLATE(j.CITY, 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU')) LIKE LOWER(TRANSLATE('%" + vLista.get(i) + "%', 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU'))";
          }
          strCondicion = strCondicion + ")\n";
        }
      }

      strValor = Utils.getValor(fConsulta, "CARGO_PEOPLE");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (d.US_SOC_CD = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR d.US_SOC_CD = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ") AND d.EMPLID = a.EMPLID";
        }
      }

      strJoin = strJoin + " LEFT JOIN PS_PERS_NID b ON b.EMPLID = a.EMPLID AND UPPER(b.PRIMARY_NID) ='Y' LEFT JOIN PS_EMAIL_ADDRESSES c ON c.EMPLID = a.EMPLID AND UPPER(c.PREF_EMAIL_FLAG) = 'Y' LEFT JOIN PS_PRIORWORK_EXPER d ON d.emplid = a.emplid LEFT JOIN PS_US_SOC_TBL e ON e.US_SOC_CD = d.US_SOC_CD LEFT JOIN PS_EXT_ORG_TBL f ON f.EXT_ORG_ID = d.EXT_ORG_ID LEFT JOIN PS_ORG_LOCATION h ON h.EXT_ORG_ID = f.EXT_ORG_ID LEFT JOIN PS_ADDRESSES j ON j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home' LEFT JOIN PS_PERSONAL_PHONE k ON k.EMPLID = a.EMPLID AND UPPER(k.PREF_PHONE_FLAG) = 'Y'";

      strTablas = strTablas + " PS_PERSONAL_DATA a";

      strCondicion = strCondicion + " GROUP BY a.EMPLID, b.NATIONAL_ID_TYPE, b.NATIONAL_ID, a.FIRST_NAME, a.LAST_NAME, c.EMAIL_ADDR, j.CITY, j.ADDRESS1, k.PHONE, e.DESCR, f.DESCR, h.CITY, h.ADDRESS1, d.PHONE ORDER BY a.FIRST_NAME, a.LAST_NAME ASC, d.PHONE DESC";

      strSql = strSql + strTablas + strJoin + strCondicion;

      System.out.println("consulta: " + strSql);
      vResultado = EjecutaConsulta.Ejecutar(strSql);
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarDatosBasicos(Fila fConsulta) " + e.toString());
    }

    return vResultado;
  }

  public static Vector consultarEgresados(Fila fConsulta)
  {
    Vector vResultado = new Vector();
    try
    {
      int i;
      String strSql = "SELECT a.EMPLID, b.NATIONAL_ID_TYPE TIPO_DOCUMENTO, b.NATIONAL_ID NUMERO_DOCUMENTO, a.FIRST_NAME NOMBRES, a.LAST_NAME APELLIDOS, c.EMAIL_ADDR CORREO, j.CITY CIUDAD_RESIDENCIA, j.ADDRESS1 DIRECCION_RESIDENCIA, k.PHONE TELEFONO_RESIDENCIA, e.DESCR CARGO, f.DESCR EMPRESA, h.CITY CIUDAD_EMPRESA, h.ADDRESS1 DIRECCION_EMPRESA, d.PHONE TELEFONO_EMPRESA";

      String strTablas = " FROM estudiantes es";

      String strJoin = " LEFT JOIN PS_PERS_NID b ON b.EMPLID = a.EMPLID AND UPPER(b.PRIMARY_NID) ='Y' LEFT JOIN PS_EMAIL_ADDRESSES c ON c.EMPLID = a.EMPLID AND UPPER(c.PREF_EMAIL_FLAG) = 'Y' LEFT JOIN PS_PRIORWORK_EXPER d ON d.emplid = a.emplid LEFT JOIN PS_US_SOC_TBL e ON e.US_SOC_CD = d.US_SOC_CD LEFT JOIN PS_EXT_ORG_TBL f ON f.EXT_ORG_ID = d.EXT_ORG_ID LEFT JOIN PS_ORG_LOCATION h ON h.EXT_ORG_ID = f.EXT_ORG_ID LEFT JOIN PS_ADDRESSES j ON j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home' LEFT JOIN PS_PERSONAL_PHONE k ON k.EMPLID = a.EMPLID AND UPPER(k.PREF_PHONE_FLAG) = 'Y'";

      String strCondicion = " WHERE a.emplid = es.emplid";

      String strCarrera = fConsulta.getValor("CARRERA_EGRESADO_PREGRADO");
      String strAnnoGrado = fConsulta.getValor("ANNO_GRADO_EGRESADO_PREGRADO");

      Vector vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strAnnoGrado.equals(""))) ? 1 : 0)) != 0)
      {
        if (!(strAnnoGrado.equals("")))
          strCondicion = strCondicion + " AND es.emplid = i.emplid";

        strCondicion = strCondicion + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")\n";
        }

        vLista = Utils.dividirString(strAnnoGrado);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strTablas = strTablas + ", PS_ACAD_DEGR i";

          if (strCondicion.contains("es.prg_codigo"))
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
        strCondicion = strCondicion + " AND es.acad_career = 'UGRD')\n";
      }

      strCarrera = fConsulta.getValor("CARRERA_EGRESADO_POSTGRADO");
      strAnnoGrado = fConsulta.getValor("ANNO_GRADO_EGRESADO_POSTGRADO");

      vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strAnnoGrado.equals(""))) ? 1 : 0)) != 0)
      {
        if (strCondicion.contains("es.acad_career = 'UGRD'"))
          strCondicion = strCondicion + " OR (";
        else
          strCondicion = strCondicion + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")\n";
        }

        vLista = Utils.dividirString(strAnnoGrado);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (!(strTablas.contains("PS_ACAD_DEGR")))
          {
            strTablas = strTablas + ", PS_ACAD_DEGR i";
          }

          if ((strCondicion.contains("es.prg_codigo")) && (!(strCarrera.equals(""))))
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
        strCondicion = strCondicion + " AND es.acad_career = 'GRAD')";
      }

      strCondicion = strCondicion + ")";

      strTablas = strTablas + ", PS_PERSONAL_DATA a";

      if ((!(strAnnoGrado.equals(""))) && (!(strCondicion.contains("es.emplid = i.emplid"))))
        strCondicion = strCondicion + " AND es.emplid = i.emplid";

      strSql = strSql + strTablas + strJoin + strCondicion;

      strSql = strSql + " GROUP BY a.EMPLID, b.NATIONAL_ID_TYPE, b.NATIONAL_ID, a.FIRST_NAME, a.LAST_NAME, c.EMAIL_ADDR, j.CITY, j.ADDRESS1, k.PHONE, e.DESCR, f.DESCR, h.CITY, h.ADDRESS1, d.PHONE ORDER BY a.FIRST_NAME, a.LAST_NAME ASC, d.PHONE DESC";

      System.out.println("consulta: " + strSql);
      vResultado = EjecutaConsulta.Ejecutar(strSql);
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarEgresados(Fila fConsulta) " + e.toString());
    }

    return vResultado;
  }

  public static Vector consultarEstudiantes(Fila fConsulta)
  {
    Vector vResultado = new Vector();
    try
    {
      int i;
      String strTablas = " FROM estudiantes es, PS_PERSONAL_DATA a";

      String strSql = "SELECT a.EMPLID, b.NATIONAL_ID_TYPE TIPO_DOCUMENTO, b.NATIONAL_ID NUMERO_DOCUMENTO, a.FIRST_NAME NOMBRES, a.LAST_NAME APELLIDOS, c.EMAIL_ADDR CORREO, j.CITY CIUDAD_RESIDENCIA, j.ADDRESS1 DIRECCION_RESIDENCIA, k.PHONE TELEFONO_RESIDENCIA, e.DESCR CARGO, f.DESCR EMPRESA, h.CITY CIUDAD_EMPRESA, h.ADDRESS1 DIRECCION_EMPRESA, d.PHONE TELEFONO_EMPRESA" + strTablas + " LEFT JOIN PS_PERS_NID b ON b.EMPLID = a.EMPLID AND UPPER(b.PRIMARY_NID) ='Y'" + " LEFT JOIN PS_EMAIL_ADDRESSES c ON c.EMPLID = a.EMPLID AND UPPER(c.PREF_EMAIL_FLAG) = 'Y'" + " LEFT JOIN PS_PRIORWORK_EXPER d ON d.emplid = a.emplid" + " LEFT JOIN PS_US_SOC_TBL e ON e.US_SOC_CD = d.US_SOC_CD" + " LEFT JOIN PS_EXT_ORG_TBL f ON f.EXT_ORG_ID = d.EXT_ORG_ID" + " LEFT JOIN PS_ORG_LOCATION h ON h.EXT_ORG_ID = f.EXT_ORG_ID" + " LEFT JOIN PS_ADDRESSES j ON j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home'" + " LEFT JOIN PS_PERSONAL_PHONE k ON k.EMPLID = a.EMPLID AND UPPER(k.PREF_PHONE_FLAG) = 'Y'" + " WHERE a.emplid = es.emplid" + " AND es.eas_codigo = 'AC'";

      String strCarrera = fConsulta.getValor("CARRERA_ESTUDIANTE_PREGRADO");
      String strSemestre = fConsulta.getValor("SEMESTRE_ESTUDIANTE_PREGRADO");

      Vector vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strSemestre.equals(""))) ? 1 : 0)) != 0)
      {
        strSql = strSql + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strSql = strSql + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strSql = strSql + ")\n";
        }

        vLista = Utils.dividirString(strSemestre);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (strSql.contains("es.prg_codigo"))
            strSql = strSql + " AND";

          strSql = strSql + " (semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(0);

          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(i);
          }

          strSql = strSql + ")";
        }
        strSql = strSql + " AND es.acad_career = 'UGRD')\n";
      }

      strCarrera = Utils.getValor(fConsulta, "CARRERA_ESTUDIANTE_POSTGRADO");
      strSemestre = Utils.getValor(fConsulta, "SEMESTRE_ESTUDIANTE_POSTGRADO");

      vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strSemestre.equals(""))) ? 1 : 0)) != 0)
      {
        if (strSql.contains("es.acad_career = 'UGRD'"))
          strSql = strSql + " OR (";
        else
          strSql = strSql + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strSql = strSql + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strSql = strSql + ")\n";
        }

        vLista = Utils.dividirString(strSemestre);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if ((strSql.contains("es.prg_codigo")) && (!(strCarrera.equals(""))))
            strSql = strSql + " AND";

          strSql = strSql + " (semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(0);

          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(i);
          }

          strSql = strSql + ")";
        }
        strSql = strSql + " AND es.acad_career = 'GRAD')";
      }

      strSql = strSql + ")";

      strSql = strSql + " GROUP BY a.EMPLID, b.NATIONAL_ID_TYPE, b.NATIONAL_ID, a.FIRST_NAME, a.LAST_NAME, c.EMAIL_ADDR, j.CITY, j.ADDRESS1, k.PHONE, e.DESCR, f.DESCR, h.CITY, h.ADDRESS1, d.PHONE ORDER BY a.FIRST_NAME, a.LAST_NAME ASC, d.PHONE DESC";

      System.out.println("consulta: " + strSql);
      vResultado = EjecutaConsulta.Ejecutar(strSql);
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarEgresados(Fila fConsulta) " + e.toString());
    }

    return vResultado;
  }

  public static Vector buscarPersona(Fila fConsulta)
  {
    Vector datos = new Vector();
    try
    {
      String strTablas = " FROM PS_PERSONAL_DATA a";

      String strSql = " SELECT a.EMPLID, b.NATIONAL_ID_TYPE TIPO_DOCUMENTO, b.NATIONAL_ID NUMERO_DOCUMENTO, TRIM(a.FIRST_NAME) NOMBRES, TRIM(a.LAST_NAME) APELLIDOS, a.SEX GENERO, a.MAR_STATUS ESTADO_CIVIL, a.BIRTHDATE FECHA_NACIMIENTO, a.BIRTHCOUNTRY PAIS_NACIMIENTO, a.BIRTHPLACE CIUDAD_NACIMIENTO, j.CITY CIUDAD_RESIDENCIA, j.ADDRESS1 DIRECCION_RESIDENCIA, k.PHONE TELEFONO_RESIDENCIA, c.EMAIL_ADDR CORREO, e.DESCR CARGO, f.DESCR EMPRESA, h.CITY CIUDAD_EMPRESA, h.ADDRESS1 DIRECCION_EMPRESA, d.PHONE TELEFONO_EMPRESA" + strTablas + " LEFT JOIN PS_PERS_NID b ON b.EMPLID = a.EMPLID AND UPPER(b.PRIMARY_NID) ='Y'" + " LEFT JOIN PS_EMAIL_ADDRESSES c ON c.EMPLID = a.EMPLID AND UPPER(c.PREF_EMAIL_FLAG) = 'Y'" + " LEFT JOIN PS_PRIORWORK_EXPER d ON d.EMPLID = a.EMPLID" + " LEFT JOIN PS_US_SOC_TBL e ON e.US_SOC_CD = d.US_SOC_CD" + " LEFT JOIN PS_EXT_ORG_TBL f ON f.EXT_ORG_ID = d.EXT_ORG_ID" + " LEFT JOIN PS_ORG_LOCATION h ON h.EXT_ORG_ID = f.EXT_ORG_ID" + " LEFT JOIN PS_ADDRESSES j ON j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home'" + " LEFT JOIN PS_PERSONAL_PHONE k ON k.EMPLID = a.EMPLID AND UPPER(k.PREF_PHONE_FLAG) = 'Y'";

      String documento = Utils.getValor(fConsulta, "NUMERO_DOCUMENTO");
      String emplid = Utils.getValor(fConsulta, "EMPLID");

      if ((((!(documento.equals(""))) ? 1 : 0) | ((!(emplid.equals(""))) ? 1 : 0)) != 0)
        strSql = strSql + " WHERE";

      if ((documento != null) && (documento.length() > 0)) {
        strSql = strSql + "  b.NATIONAL_ID = '" + documento + "'";
      }

      if ((emplid != null) && (emplid.length() > 0)) {
        strSql = strSql + "  a.EMPLID = '" + emplid + "'";
      }

      strSql = strSql + " ORDER BY a.FIRST_NAME, a.LAST_NAME";

      System.out.println("consulta: " + strSql);
      datos = EjecutaConsulta.Ejecutar(strSql);
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.buscarPersona " + e.toString());
    }
    return datos;
  }

  public static Vector buscarDatosDestinatarios(Fila fConsulta)
  {
    Vector datos = new Vector();
    try
    {
      String strTablas = " FROM PS_PERSONAL_DATA a";

      String strSql = " SELECT a.EMPLID, b.NATIONAL_ID_TYPE TIPO_DOCUMENTO, b.NATIONAL_ID NUMERO_DOCUMENTO, TRIM(a.FIRST_NAME) NOMBRES, TRIM(a.LAST_NAME) APELLIDOS, j.CITY CIUDAD_RESIDENCIA, j.ADDRESS1 DIRECCION_RESIDENCIA, k.PHONE TELEFONO_RESIDENCIA, c.EMAIL_ADDR CORREO, e.DESCR CARGO, f.DESCR EMPRESA, h.CITY CIUDAD_EMPRESA, h.ADDRESS1 DIRECCION_EMPRESA, d.PHONE TELEFONO_EMPRESA" + strTablas + " LEFT JOIN PS_PERS_NID b ON b.EMPLID = a.EMPLID AND UPPER(b.PRIMARY_NID) ='Y'" + " LEFT JOIN PS_EMAIL_ADDRESSES c ON c.EMPLID = a.EMPLID AND UPPER(c.PREF_EMAIL_FLAG) = 'Y'" + " LEFT JOIN PS_PRIORWORK_EXPER d ON d.EMPLID = a.EMPLID" + " LEFT JOIN PS_US_SOC_TBL e ON e.US_SOC_CD = d.US_SOC_CD" + " LEFT JOIN PS_EXT_ORG_TBL f ON f.EXT_ORG_ID = d.EXT_ORG_ID" + " LEFT JOIN PS_ORG_LOCATION h ON h.EXT_ORG_ID = f.EXT_ORG_ID" + " LEFT JOIN PS_ADDRESSES j ON j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home'" + " LEFT JOIN PS_PERSONAL_PHONE k ON k.EMPLID = a.EMPLID AND UPPER(k.PREF_PHONE_FLAG) = 'Y'";

      String documento = Utils.getValor(fConsulta, "NUMERO_DOCUMENTO");

      String emplid = Utils.getValor(fConsulta, "EMPLID");

      if ((((!(documento.equals(""))) ? 1 : 0) | ((!(emplid.equals(""))) ? 1 : 0)) != 0)
        strSql = strSql + " WHERE";

      if ((documento != null) && (documento.length() > 0))
        strSql = strSql + "  b.NATIONAL_ID = '" + documento + "'";

      if ((emplid != null) && (emplid.length() > 0))
        strSql = strSql + "  a.EMPLID = '" + emplid + "'";

      strSql = strSql + " ORDER BY a.FIRST_NAME, a.LAST_NAME";

      System.out.println("consulta: " + strSql);
      datos = EjecutaConsulta.Ejecutar(strSql);
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.buscarDatosDestinatarios(Fila fConsulta) " + e.toString());
    }
    return datos;
  }

  public static String consultarNumeroCelular(String strEmplid)
  {
    String strNumCel = "";
    try
    {
      String strSql = "SELECT phone NUMERO_CELULAR FROM PS_PERSONAL_PHONE WHERE emplid = '" + strEmplid + "' AND phone_type = 'CELL'";

      strNumCel = ((Fila)(Fila)EjecutaConsulta.Ejecutar(strSql).get(0)).getValor("NUMERO_CELULAR");
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarNumeroCelular(String strEmplid)" + e.toString());
    }

    return strNumCel;
  }

  public static String consultarProfesionPersona(String strEmplid)
  {
    String strProfesion = "";
    try
    {
      String strSql = "SELECT descr NOMBRE FROM PS_US_SIC_TBL WHERE emplid = '" + strEmplid + "'";

      strProfesion = ((Fila)(Fila)EjecutaConsulta.Ejecutar(strSql).get(0)).getValor("NOMBRE");
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarProfesionPersona(String strEmplid)" + e.toString());
    }

    return strProfesion;
  }

  public static String consultarNombreCiudad(String strConsecutivo)
  {
    String strNombreCiudad = "";
    try
    {
      String strTablas = " FROM PS_PUJ_CIUDADES";

      String strSql = " SELECT    NOMBRE" + strTablas + " WHERE" + " CODIGO = '" + strConsecutivo + "'";

      strNombreCiudad = ((Fila)(Fila)EjecutaConsulta.Ejecutar(strSql).get(0)).getValor("NOMBRE");
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarNombreCiudad(String strConsecutivo) " + e.toString());
    }

    return strNombreCiudad;
  }

  public static int contarDatosBasicos(Fila fConsulta)
  {
    int iResultado = 0;

    Vector vResultado = new Vector();
    try
    {
      String strSql = "SELECT COUNT(DISTINCT a.EMPLID) CANTIDAD";

      String strTablas = " FROM";

      String strCondicion = "";

      String strValor = Utils.getValor(fConsulta, "ESTADO_CIVIL_PEOPLE");
      Vector vLista = new Vector();
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " WHERE (a.MAR_STATUS = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            strCondicion = strCondicion + " OR a.MAR_STATUS = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
      }

      strValor = Utils.getValor(fConsulta, "GENERO_PEOPLE");
      vLista = new Vector();
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
            if(!strCondicion.contains("WHERE")) {
                strCondicion = (new StringBuilder()).append(strCondicion).append(" WHERE").toString();
            }else{
                strCondicion = (new StringBuilder()).append(strCondicion).append(" AND").toString();
            }
          strCondicion = strCondicion + " (a.SEX = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            strCondicion = strCondicion + " OR a.SEX = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
      }

      strValor = Utils.getValor(fConsulta, "EDAD");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          Calendar calendario = Calendar.getInstance();

          int iDiaM = calendario.get(5);

          int iMes = calendario.get(2);

          int iAnno = calendario.get(1);

          int iAnnoInicial = iAnno - Integer.parseInt(vLista.get(0).toString());
          String strFechaInicial = iDiaM + "/" + (iMes + 1) + "/" + iAnnoInicial;

          int iAnnoFinal = iAnnoInicial - 5;
          String strFechaFinal = iDiaM + "/" + (iMes + 1) + "/" + iAnnoFinal;

          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (a.BIRTHDATE BETWEEN '" + strFechaFinal + "'" + " AND '" + strFechaInicial + "'";

          for (int i = 1; i < vLista.size(); ++i)
          {
            iAnnoInicial = iAnno - Integer.parseInt(vLista.get(i).toString());
            strFechaInicial = iDiaM + "/" + (iMes + 1) + "/" + iAnnoInicial;

            iAnnoFinal = iAnnoInicial - 5;
            strFechaFinal = iDiaM + "/" + (iMes + 1) + "/" + iAnnoFinal;

            strCondicion = strCondicion + " OR a.BIRTHDATE BETWEEN '" + strFechaFinal + "'" + " AND '" + strFechaInicial + "'";
          }

          strCondicion = strCondicion + ")\n";
        }
      }

      strValor = Utils.getValor(fConsulta, "CIUDAD_RESIDENCIA_PEOPLE");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strTablas = strTablas + " PS_ADDRESSES j,";

          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (LOWER(TRANSLATE(j.CITY, 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU')) LIKE LOWER(TRANSLATE('%" + vLista.get(0) + "%', 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU'))";
          for (int i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR LOWER(TRANSLATE(j.CITY, 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU')) LIKE LOWER(TRANSLATE('%" + vLista.get(i) + "%', 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU'))";
          }
          strCondicion = strCondicion + ")\n AND j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home'";
        }
      }

      strValor = Utils.getValor(fConsulta, "CARGO_PEOPLE");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strTablas = strTablas + " PS_PRIORWORK_EXPER d,";
          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (d.US_SOC_CD = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR d.US_SOC_CD = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ") AND d.EMPLID = a.EMPLID";
        }

      }

      strTablas = strTablas + " PS_PERSONAL_DATA a";

      strSql = strSql + strTablas + strCondicion;

      vResultado = EjecutaConsulta.Ejecutar(strSql);

      iResultado = Integer.parseInt(((Fila)vResultado.get(0)).getValor("CANTIDAD"));
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.contarDatosBasicos(Fila fConsulta) " + e.toString());
    }

    return iResultado;
  }

  public static int contarEstudiantes(Fila fConsulta)
  {
    int iResultado = 0;

    Vector vResultado = new Vector();
    try
    {
      int i;
      String strTablas = " FROM estudiantes es, PS_PERSONAL_DATA a";

      String strSql = "SELECT COUNT(DISTINCT a.EMPLID) CANTIDAD" + strTablas + " WHERE a.emplid = es.emplid" + " AND es.eas_codigo = 'AC'";

      String strCarrera = fConsulta.getValor("CARRERA_ESTUDIANTE_PREGRADO");
      String strSemestre = fConsulta.getValor("SEMESTRE_ESTUDIANTE_PREGRADO");

      Vector vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strSemestre.equals(""))) ? 1 : 0)) != 0)
      {
        strSql = strSql + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strSql = strSql + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strSql = strSql + ")\n";
        }

        vLista = Utils.dividirString(strSemestre);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (strSql.contains("es.prg_codigo"))
            strSql = strSql + " AND";

          strSql = strSql + " (semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(0);

          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(i);
          }

          strSql = strSql + ")";
        }
        strSql = strSql + " AND es.acad_career = 'UGRD')\n";
      }

      strCarrera = Utils.getValor(fConsulta, "CARRERA_ESTUDIANTE_POSTGRADO");
      strSemestre = Utils.getValor(fConsulta, "SEMESTRE_ESTUDIANTE_POSTGRADO");

      vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strSemestre.equals(""))) ? 1 : 0)) != 0)
      {
        if (strSql.contains("es.acad_career = 'UGRD'"))
          strSql = strSql + " OR (";
        else
          strSql = strSql + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strSql = strSql + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strSql = strSql + ")\n";
        }

        vLista = Utils.dividirString(strSemestre);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if ((strSql.contains("es.prg_codigo")) && (!(strCarrera.equals(""))))
            strSql = strSql + " AND";

          strSql = strSql + " (semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(0);

          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(i);
          }

          strSql = strSql + ")";
        }
        strSql = strSql + " AND es.acad_career = 'GRAD')";
      }

      strSql = strSql + ")";

      vResultado = EjecutaConsulta.Ejecutar(strSql);

      iResultado = Integer.parseInt(((Fila)vResultado.get(0)).getValor("CANTIDAD"));
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.contarEstudiantes(Fila fConsulta) " + e.toString());
    }
    return iResultado;
  }

  public static int contarEgresados(Fila fConsulta)
  {
    int iResultado = 0;

    Vector vResultado = new Vector();
    try
    {
      int i;
      String strSql = "SELECT COUNT(DISTINCT a.EMPLID) CANTIDAD";

      String strTablas = " FROM estudiantes es";

      String strCondicion = " WHERE a.emplid = es.emplid";

      String strCarrera = fConsulta.getValor("CARRERA_EGRESADO_PREGRADO");
      String strAnnoGrado = fConsulta.getValor("ANNO_GRADO_EGRESADO_PREGRADO");

      Vector vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strAnnoGrado.equals(""))) ? 1 : 0)) != 0)
      {
        if (!(strAnnoGrado.equals("")))
          strCondicion = strCondicion + " AND es.emplid = i.emplid";

        strCondicion = strCondicion + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")\n";
        }

        vLista = Utils.dividirString(strAnnoGrado);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strTablas = strTablas + ", PS_ACAD_DEGR i";

          if (strCondicion.contains("es.prg_codigo"))
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
        strCondicion = strCondicion + " AND es.acad_career = 'UGRD')\n";
      }

      strCarrera = fConsulta.getValor("CARRERA_EGRESADO_POSTGRADO");
      strAnnoGrado = fConsulta.getValor("ANNO_GRADO_EGRESADO_POSTGRADO");

      vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strAnnoGrado.equals(""))) ? 1 : 0)) != 0)
      {
        if (strCondicion.contains("es.acad_career = 'UGRD'"))
          strCondicion = strCondicion + " OR (";
        else
          strCondicion = strCondicion + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")\n";
        }

        vLista = Utils.dividirString(strAnnoGrado);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (!(strTablas.contains("PS_ACAD_DEGR")))
          {
            strTablas = strTablas + ", PS_ACAD_DEGR i";
          }

          if ((strCondicion.contains("es.prg_codigo")) && (!(strCarrera.equals(""))))
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
        strCondicion = strCondicion + " AND es.acad_career = 'GRAD')";
      }

      strCondicion = strCondicion + ")";

      strTablas = strTablas + ", PS_PERSONAL_DATA a";

      if ((!(strAnnoGrado.equals(""))) && (!(strCondicion.contains("es.emplid = i.emplid"))))
        strCondicion = strCondicion + " AND es.emplid = i.emplid";

      strSql = strSql + strTablas + strCondicion;

      vResultado = EjecutaConsulta.Ejecutar(strSql);

      iResultado = Integer.parseInt(((Fila)vResultado.get(0)).getValor("CANTIDAD"));
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.contarEgresados(Fila fConsulta) " + e.toString());
    }

    return iResultado;
  }
}